[新機能]Amazon Bedrock Knowledge Basesが自動生成クエリフィルターを提供開始しました #AWSreInvent

[新機能]Amazon Bedrock Knowledge Basesが自動生成クエリフィルターを提供開始しました #AWSreInvent

Clock Icon2024.12.06

こんにちは、@TakaakiKakei です。

2024年12月2日~12月6日(米国太平洋標準時)に開催されるAWS re:Invent 2024に関連して、以下のアップデートについてご紹介します。

  • Amazon Bedrock Knowledge Basesが自動生成クエリフィルターを提供開始

https://aws.amazon.com/jp/about-aws/whats-new/2024/12/amazon-bedrock-knowledge-bases-auto-generated-query-filters-improved-retrieval/

Amazon Bedrock Knowledge Bases now provides auto-generated query filters for improved retrieval

3行まとめ

  • Amazon Bedrock Knowledge Basesが自動生成クエリフィルターを提供開始し、検索精度を向上
  • この機能により、複雑なフィルター式を手動で構築せずに検索結果を絞り込むことが可能に
  • 東京リージョンを含む複数のリージョンで利用可能

何が嬉しいか

このアップデートにより、Amazon Bedrock Knowledge Basesユーザーの検索体験が大幅に向上します。自動生成クエリフィルターの導入で、複雑なフィルター式の手動作成が不要となり、時間と労力を節約できます。システムがクエリの文脈を自動理解し、適切なフィルターを生成するため、より関連性の高い検索結果を迅速に得られるようになることが期待できます。


以下、調査です。

AWS公式ドキュメント

https://docs.aws.amazon.com/bedrock/latest/userguide/kb-test-config.html

Implicit metadata filtering が該当すると見受けられます。ユーザーのクエリとメターデータをベースに、Anthropic Claude 3.5 Sonnetで自動検索フィルターを生成するようです。

CleanShot 2024-12-02 at 12.56.22@2x.png

試してみる

S3にデータソースを配置

検証に利用するKnowledge Basesのデータソースに、適当なファイルを配置します。

  • s3://xxxxx/data/ダミー有給申請.pdf
  • s3://xxxxx/data/ダミー経費申請.pdf

メタデータも同時に配置します。各ファイル名に.metadata.jsonを付与して、下記のような指定のJSONフォーマットでメタデータを配置します。

  • s3://xxxxx/data/ダミー有休精算.pdf.metadata.json
{
  "metadataAttributes": {
    "created_by": "John",
    "updated_at": "2023-12-03",
    "request_type": "有休申請"
  }
}
  • s3://xxxxx/data/ダミー経費精算.pdf.metadata.json
{
  "metadataAttributes": {
    "created_by": "Takaaki Kakei",
    "updated_at": "2024-12-03",
    "request_type": "経費申請"
  }
}

Knowledge Basesを準備

検証に利用するKnowledge Basesを準備します。以下の公式ガイドを参考にしてください。

https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/knowledge-base-create.html

今回は以下のようなKnowledge Basesを作成します。

  • S3のデータソースとしてs3://xxxxx/data/を指定
  • 適当に作成した「ダミー有給申請.pdf」と「ダミー経費申請.pdf」と関連のメタデータが読み込まれる想定

IAMロールの更新

Anthropic Claude 3.5 Sonnetで自動検索フィルターを生成するめ、検証に利用するKnowledge BasesのIAMロールの追加が必要です。下図のようにClaude 3.5 SonnetのモデルARN(例:arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-3-5-sonnet-20240620-v1:0)を追加しておきます。

CleanShot 2024-12-02 at 13.55.01@2x.png

AWS CLIでのテスト

はじめに、必要に応じてお手元のAWS CLIのバージョンをアップデートしておいてください。

https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

今回はJohnが作成した申請ファイル内容を教えてというプロンプトで検索を行います。Johnの情報はファイル内には含まれておらず、メタデータにのみ存在します。

The implicitFilterConfiguration is specified in the vectorSearchConfiguration of the Retrieve request body. Include the following fields

AWS CLIで、メタデータの指定なしでRetrive APIを利用する場合は、以下のようなコマンドです。

aws bedrock-agent-runtime retrieve \
  --knowledge-base-id '<Knowledge BasesのID>' \
  --retrieval-query '{"text": "Johnが作成した申請ファイル内容を教えて"}'

ファイルの内容にはファイル作成者の情報がないため、Takaaki Kakeiが作成したファイルも検索結果に含まれています。想定通りの挙動です。

{
    "retrievalResults": [
        {
            "content": {
                "text": ...snip...,
                "type": "TEXT"
            },
            "location": {
                "s3Location": {
                    "uri": "s3://...snip.../data/ダミー有休申請.pdf"
                },
                "type": "S3"
            },
            "metadata": {
                "x-amz-bedrock-kb-source-uri": "s3://...snip.../data/ダミー有休申請.pdf",
                "updated_at": "2023-12-03",
                "request_type": "有休申請",
                "created_by": "John",
                ...snip...
            },
            "score": 0.53992206
        },
        {
            ...snip...
            "metadata": {
                "x-amz-bedrock-kb-source-uri": "s3://...snip.../data/ダミー有休申請.pdf",
                "updated_at": "2023-12-03",
                "request_type": "有休申請",
                "created_by": "John",
                ...snip...
            },
            "score": 0.5146175
        },
        {
            ...snip...
            "metadata": {
                "x-amz-bedrock-kb-source-uri": "s3://...snip.../data/ダミー経費精算.pdf",
                "updated_at": "2024-12-03",
                "request_type": "経費申請",
                "created_by": "Takaaki Kakei", # 検索結果に含まれている
                ...snip...
            },
            "score": 0.5051521
        },
		    ...snip...
            "metadata": {
                "x-amz-bedrock-kb-source-uri": "s3://...snip.../data/ダミー経費精算.pdf",
                "updated_at": "2024-12-03",
                "request_type": "経費申請",
                "created_by": "Takaaki Kakei", # 検索結果に含まれている
                ...snip...
            },
            "score": 0.4847678
        },
        {
            ...snip...
            "metadata": {
                "x-amz-bedrock-kb-source-uri": "s3://...snip.../data/ダミー有休申請.pdf",
                "updated_at": "2023-12-03",
                "request_type": "有休申請",
                "created_by": "John",
                ...snip...
            },
            "score": 0.47736603
        }
		...snip...

自動生成クエリフィルターを利用した場合は、以下のようなコマンドになります。implicitFilterConfigurationでメターデータのスキーマを指定しています。

aws bedrock-agent-runtime retrieve \
  --knowledge-base-id '<Knowledge BasesのID>' \
  --retrieval-query '{"text": "Johnが作成した申請ファイル内容を教えて"}' \
  --retrieval-configuration '{
    "vectorSearchConfiguration": {
      "implicitFilterConfiguration": {
        "metadataAttributes": [
          {
            "key": "created_by",
            "type": "STRING",
            "description": "File creator"
          },
          {
            "key": "updated_at",
            "type": "STRING",
            "description": "Last updated date"
          },
          {
            "key": "request_type",
            "type": "STRING",
            "description": "Request type"
          }
        ],
        "modelArn": "arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-3-5-sonnet-20240620-v1:0"
      }
    }
  }'

作成者がJohnに絞り込まれた、検索結果のみ取得することができました。メタデータのスキーマ情報を元に、自動生成クエリフィルターが機能していることがわかりました。

{
    "retrievalResults": [
        {
            "content": {
                "text": ...snip...,
                "type": "TEXT"
            },
            "location": {
                "s3Location": {
                    "uri": "s3://...snip.../data/ダミー有休申請.pdf"
                },
                "type": "S3"
            },
            "metadata": {
                "x-amz-bedrock-kb-source-uri": "s3://...snip.../data/ダミー有休申請.pdf",
                "updated_at": "2023-12-03",
                "request_type": "有休申請",
                "created_by": "John",
                ...snip...
            },
            "score": 0.53710216
        },
        {
            ...snip...
            "metadata": {
                "x-amz-bedrock-kb-source-uri": "s3://...snip.../data/ダミー有休申請.pdf",
                "updated_at": "2023-12-03",
                "request_type": "有休申請",
                "created_by": "John",
                ...snip...
            },
            "score": 0.51281065
        },
        {
            ...snip...
            "metadata": {
                "x-amz-bedrock-kb-source-uri": "s3://...snip.../data/ダミー有休申請.pdf",
                "updated_at": "2023-12-03",
                "request_type": "有休申請",
                "created_by": "John",
                ...snip...
            },
            "score": 0.4802953
        },
        {
            ...snip...
            "metadata": {
                "x-amz-bedrock-kb-source-uri": "s3://...snip.../data/ダミー有休申請.pdf",
                "updated_at": "2023-12-03",
                "request_type": "有休申請",
                "created_by": "John",
                ...snip...
            },
            "score": 0.45836914
        }
    ],
	...snip...

さいごに

今回のアップデートにより、メタデータを充実させることで、より精度の高い検索結果を得やすくなります。もしも、厳密なフィルター条件を指定したい場合は、手動フィルターも組み合わせて対応しましょう。

それではまた!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.